/*
 * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
 * Licensed under the 【火山方舟】原型应用软件自用许可协议
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at 
 *     https://www.volcengine.com/docs/82379/1433703
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import { useEffect } from "react";
import { useMemoizedFn } from "ahooks";

export interface KeyboardNavigationOptions {
  onLeftArrow: () => void;
  onRightArrow: () => void;
}

export function useKeyboardNavigation(options: KeyboardNavigationOptions) {
  const { onLeftArrow, onRightArrow } = options;

  const handleKeyDown = useMemoizedFn((event: KeyboardEvent) => {
    if (event.isComposing) {
      return;
    }

    const target = event.target as HTMLElement;
    if (
      target &&
      (target.tagName === "INPUT" ||
        target.tagName === "TEXTAREA" ||
        target.isContentEditable)
    ) {
      return;
    }

    if (event.key === "ArrowLeft") {
      onLeftArrow();
    } else if (event.key === "ArrowRight") {
      onRightArrow();
    }
  });

  useEffect(() => {
    document.addEventListener("keydown", handleKeyDown);

    return () => {
      document.removeEventListener("keydown", handleKeyDown);
    };
  }, [handleKeyDown]);
}
